#ifndef SAMPLER
#define SAMPLER
namespace gname
{
	
   struct Sampler
	{
	public:
		Sampler(){}
		enum TextureFilterType
		{
			 
	    TFILTER_NONE,
		TFILTER_BILINEAR_NOMIPMAP,
	    TFILTER_BILINEAR,
		TFILTER_TRILINEAR,
		TFILTER_ANISO_2X,
		TFILTER_ANISO_4X,
		TFILTER_ANISO_8X,
		TFILTER_ANISO_16X
		
		};

		enum WrapType
		{
		 TW_CLAMP           = 0x2900,
		 TW_REPEAT          = 0x2901,
		 TW_CLAMP_TO_BORDER = 0x812D,
		 TW_CLAMP_TO_EDGE   = 0x812F
		};

		enum TextureFilter
		{
			 
	    FT_NEAREST	= 0x2600,
		FT_LINEAR  = 0x2601,
	    FT_NEAREST_MIPMAP_NEAREST = 0x2700,
		FT_LINEAR_MIPMAP_NEAREST  = 0x2701,
		FT_NEAREST_MIPMAP_LINEAR  = 0x2702,	
		FT_LINEAR_MIPMAP_LINEAR   = 0x2703,
		FT_NONE
		};
		//void ApplySampler();
		

		void SetTextureFilter(int	filter, int texTarget);
		int  GetAnisoLevel() const { return anisotropyLevel; }
		
		WrapType GetWrapS() const  { return wrapS;            }
		WrapType GetWrapT() const  { return wrapT;            }
		WrapType GetWrapR() const  { return wrapR;            }

		TextureFilter GetMagFilter() const  { return magFilter;}
		TextureFilter GetMinFilter() const  { return minFilter;}

		int           GetTexTarget() const  { return target;}

	private:
		WrapType    wrapS;
		WrapType    wrapT;
		WrapType    wrapR;
		
		TextureFilter magFilter;
		TextureFilter minFilter;
		int anisotropyLevel;
		int target;
		
		
   };
	
}
#endif